// https://acm.hdu.edu.cn/showproblem.php?pid=1003

/*
 * 如下实现方法相对而言比较丑陋，大概的思路与就是分两种情况，如果全部是负数，那就找到最大的那个作为最终结果，并且记录它的索引作为返回结果需要
 * 如果含有正数，那么就逐个尝试加入到 sum，如果 sum < 0 则有开始重置，left = i + 2 开始，因为 i + 1 表示当前的 left （left从1开始）
 * 更加推荐参考 Kadane 算法
 */


#include <iostream>
#include <algorithm>
using namespace std;

int n, a, b, ans;
int arr[100001];

void solution() {
    // 先检查是否全为负数
    int maxElement = *max_element(arr, arr + n);
    if (maxElement < 0) {
        for (int i = 0; i < n; i++) {
            if (arr[i] == maxElement) {
                a = b = i + 1;
                ans = maxElement;
                return;
            }
        }
    }

    // 正常情况：使用Kadane算法
    int sum = 0;
    int temp_start = 1; // 临时起始位置
    ans = arr[0];       // 初始化为第一个元素
    a = b = 1;          // 初始区间

    for (int i = 0; i < n; i++) {
        sum += arr[i];

        // 更新最大和及区间
        if (sum > ans) {
            ans = sum;
            a = temp_start;
            b = i + 1;
        }

        // 重置子数组
        if (sum < 0) {
            sum = 0;
            temp_start = i + 2;  // 新的子数组从下一个元素开始
        }
    }
}

int main() {
    int t;
    scanf("%d", &t);
    for (int i = 1; i <= t; i++) {
        scanf("%d", &n);
        for (int j = 0; j < n; j++) {
            scanf("%d", &arr[j]);
        }

        solution();
        printf("Case %d:\n%d %d %d\n\n", i, ans, a, b);
    }
    return 0;
}